package 方法句柄;

bind分类
在Java中存在两种绑定方式，一种为静态绑定，又称作早期绑定。另一种就是动态绑定，亦称为后期绑定。

bind区别
●静态绑定发生在编译时期，动态绑定发生在运行时
●使用private或static或final修饰的变量或者方法，使用静态绑定。而虚方法（可以被子类重写的方法）则会根据运行时的对象进行动态绑定。
●静态绑定使用类信息来完成，而动态绑定则需要使用对象信息来完成。
●重载(Overload)的方法使用静态绑定完成，而重写(Override)的方法则使用动态绑定完成

public class bind使用 {

}
public MethodHandle bind​(Object receiver, String name, MethodType type) throws NoSuchMethodException, IllegalAccessException
为非静态方法生成早期绑定方法句柄。 接收方必须具有超类型defc ，其中查找类可以访问给定名称和类型的方法。 查找对象必须可以访问该方法及其所有参数类型。 
方法句柄的类型将是方法的类型，而不插入任何额外的接收器参数。 给定的接收器将绑定到方法句柄中，以便对方法句柄的每次调用都将在给定的接收器上调用所请求的方法。
当且仅当方法的变量arity修饰符位（ 0x0080 ）已设置且尾随数组参数不是唯一参数时，返回的方法句柄将具有variable arity 。 （如果尾随数组参数是唯一的参数，
则给定的接收器值将绑定到它。）

这几乎等同于以下代码，下面提到了一些差异：


import static java.lang.invoke.MethodHandles.*;
import static java.lang.invoke.MethodType.*;
...
MethodHandle mh0 = lookup().findVirtual(defc, name, type);
MethodHandle mh1 = mh0.bindTo(receiver);
mh1 = mh1.withVarargs(mh0.isVarargsCollector());
return mh1;
 
其中defc是receiver.getClass()或receiver.getClass()的超类型，其中查找类可以访问所请求的方法。 （与bind不同， bindTo不保留变量arity。
另外， bindTo可能会抛出ClassCastException ，其中bind会抛出IllegalAccessException ，如成员为protected并且接收器被findVirtual限制为查找类。）

参数：
receiver - 从中访问方法的对象
name - 方法的名称
type - 方法的类型，省略receiver参数

结果：
所需的方法句柄

异常
NoSuchMethodException - 如果该方法不存在
IllegalAccessException - 如果访问检查失败或者方法的变量arity修饰符位已设置且 asVarargsCollector失败
SecurityException - 如果存在安全管理器且 refuses access
NullPointerException - 如果任何参数为null